package cn.hxsteel.purview.core.base;

import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import cn.hxsteel.model.bo.ViewBO;
import cn.hxsteel.purview.core.config.constant.ActionConst;
import cn.hxsteel.purview.core.tool.PurviewTool;
import cn.hxsteel.purview.core.tool.SessionTool;
import cn.hxsteel.purview.model.vo.SessionVO;

/**
 * 基础的控制器
 */
public class BaseController extends cn.hxsteel.core.base.BaseController
{
    /**
     * 保存验证失败消息对象的键名
     */
    protected final static String FAIL_KEY       = "fail";
    /**
     * 保存请求成功后，生成对象的键名
     */
    protected final static String OK_KEY         = "ok";
    /**
     * 动作的键集
     */
    protected final static String ACTION_SET_KEY = "actionSet";
    
    /**
     * 获取会话的值对象
     * 
     * @return
     */
    protected SessionVO< ? > getSessionVO( HttpServletRequest request )
    {
	return SessionTool.getSessionVO( request );
    }
    
    /**
     * 获取当前会话用户在当前访问模块可操作的动作名称的键集
     * 
     * @return
     */
    protected Set< String > getUserModuleActionNameSet( HttpServletRequest request )
    {
	return PurviewTool.getUserModuleActionNameSet( request );
    }
    
    /**
     * 获取当前会话用户的模块资源地址的地图<键名,模块的资源地址>
     * 
     * @return
     */
    protected ViewBO getUserModuleURIMap( HttpServletRequest request )
    {
	return PurviewTool.getUserActionURIMap( null, request );
    }
    
    /**
     * 获取当前会话用户的模块资源地址的地图<键名,模块的资源地址>
     * 
     * @param currentURI 当前请求的资源地址
     * @return
     */
    protected ViewBO getUserModuleURIMap( String currentURI, HttpServletRequest request )
    {
	return PurviewTool.getUserActionURIMap( currentURI, request );
    }
    
    /**
     * 获取当前会话用户可访问的视图名称
     * 
     * @param uriArray 相对的资源地址的数组
     * @return
     */
    protected String getUserPermitViewName( String[] uriArray, HttpServletRequest request )
    {
	String res = "";
	ViewBO viewBO = getUserModuleURIMap( request );
	if ( viewBO != null )
	{
	    for ( int i = 0; i < uriArray.length; i++ )
	    {
		if ( uriArray[i].equals( viewBO.get( ActionConst.CHILD_MODULE_ACTION_URI ) ) )
		{
		    res = getRedirectUrl( uriArray[i] );
		    break;
		}
	    }
	}
	return res;
    }
}